package com.wulis.provider.authority.service;

import com.wulis.common.support.BaseService;
import com.wulis.common.wrapper.ApiWrapper;
import com.wulis.provider.authority.model.bo.UpdateAccountBo;
import com.wulis.provider.authority.model.dto.CodeLoginDto;
import com.wulis.provider.authority.model.dto.FormLoginDto;
import com.wulis.provider.authority.model.dto.SendCodeDto;
import com.wulis.provider.authority.model.entity.Account;

import lombok.NonNull;

/**
 * 权限管理:账号表 Service
 *
 * @author WuliBao
 * @date 2020-04-17
 */
public interface AccountService extends BaseService<Account> {
    /**
     * WEB:插入账号
     * 
     * @param account account
     * @param password password
     * @param enable enable
     * @return Long
     */
    long insertAccount(@NonNull String account, @NonNull String password, @NonNull Integer enable);
    
    /**
     * WEB:修改账号
     * 
     * @param updateAccountBo updateAccountBo
     * @return updateAccount
     */
    int updateAccount(@NonNull UpdateAccountBo updateAccountBo);
    
    /**
     * WEB:删除账号
     * 
     * @param accountId accountId
     * @return int
     */
    int deleteAccount(@NonNull Long accountId);
    
    /**
     * WEB:表单登录
     *
     * @param formLoginDto formLoginDto
     * @return ApiWrapper
     */
    ApiWrapper<Object> formLogin(@NonNull FormLoginDto formLoginDto);
    
    /**
     * WEB:验证码登录
     *
     * @param codeLoginDto codeLoginDto
     * @return ApiWrapper
     */
    ApiWrapper<Object> codeLogin(@NonNull CodeLoginDto codeLoginDto);
    
    /**
     * WEB:发送证码
     *
     * @param sendCodeDto sendCodeDto
     * @return ApiWrapper
     */
    ApiWrapper<Object> sendCode(@NonNull SendCodeDto sendCodeDto);
    
    /**
     * WEB:注销登录
     *
     * @return ApiWrapper
     */
    ApiWrapper<Object> logout();
}
